﻿#ifndef __SS_LOGGER_H__
#define __SS_LOGGER_H__
#include "../thread/ssMsgThread.h"
#include "../tools/ssProcessInfo.h"
#include "../ssSingleton.h"

#ifndef LOG_STR_LEN
#define	LOG_STR_LEN		1024
#define	LOG_TIME_LEN	11
#endif
#define	LOG_PRINT_LEN	1000


namespace StarSeeker
{

class ssLogger : public ssMsgThread
{
public:
	// 构造和析构
	ssLogger(u8 type = 0, const char* path = 0);
	~ssLogger();
	//只打印到控制台
	void PrintDebug(const char *pLogString);
	void PrintDebugEx(const char *pLogString, ...);
	//打印到控制台且写入文件
	void Print(const char *pLogString);
	void PrintEx(const char *pLogString, ...);
	void Error(const char *pLogString);
	void ErrorEx(const char *pLogString, ...);
	//只写入文件
	void PrintFile(const char *pLogString);
	void PrintFileEx(const char *pLogString, ...);

private:
	// 线程函数
	void HandleMessage(ssMsg_s &m);
	// 保存到文件
	void SaveToFile(const char * pStr);
	// 打开文件
	void MakeDir();
	// 关闭文件
	void CloseFile();
	// 格式化字符串
	void FormatString(char lv, const char* str);
	void FormatStringEx(char lv, const char* str, va_list &vaList);


	char			m_lastDate[32];	//上一次打开文件的日期
	ssString		m_filePath;		//文件路径
	ssString		m_folder;		//文件夹名
	FILE	*		m_pFile;		//文件
	ssProcessInfo	m_info;
	u8				m_subsection;	//文件分段类型：0按天，1按小时
};

}

#define SS_LOG StarSeeker::ssSingle<StarSeeker::ssLogger>::instance()

#endif
